# -*- coding: utf-8 -*-
"""
Created: Sun May 12 22:08:08 2024
Author: w'm'h001 (Python 3.8)

Description:
"""

import numpy as np

# 1.4 Python表达式

# 1.4.1 数字
# 显式数值（常量）不支持的输入方式：
#     每3位使用逗号分隔
# 显式数值（常量）支持的特殊输入方式：
#     科学计数法：系数e10的指数
#     复数：实部+虚部j，j表示虚数单位

# int(
#     x=待转化为整型数的数字<浮点数/字符串>: 接收浮点数，返回其小数点前部分; 接收字符串，
#         其必须为整数 | 无默认值,
#     base=进制<整型数> | 10)
# 将浮点数或字符串格式整数转化为整型数
# 不支持将字符串格式浮点数直接转化为整型数
print(int(0.8))

# 1.4.2 算术操作和预定义函数
# Python支持的运算符：加（+）、减（-）、乘（*）、除（/）、幂（**）等
# 乘号不能省略
# 运算符优先级：()，*、/，+、-
# Python中，()的作用：标识函数参数、定义元组、标识优先级
# Python中，[]、{}有其他作用，不用于提示优先级

# numpy.pi
# 模块Numpy定义的常量，表示圆周率
# Python和Numpy预定义的常量的优先级高于()，如np.pi、np.e、1j
print(1 / (2 * np.pi))

# Numpy定义的三角函数sin、cos、tan的角度单位为角度制

a, b, c = 1, -1, -1
print((-b + np.sqrt(b**2 - 4 * a * c)) / (2 * a))

# 1.4.3 好的做法：变量命名
# Python和Numpy预定义的常量允许被更改，更改后的值保持到下一次更改或重置Python
print(np.pi)
np.pi = 22 / 7
print(np.pi)

# Python支持创建与内建函数同名的变量
round = 3.14
print(round)

# Python的变量命名指南：
#     一个.py文件中一个变量名应当仅用于存储意义相同的数据
#     应当使用有一定长度的有意义名称，提高代码可读性
#     由于Python对变量名的大小写敏感，在定义变量或函数时加入大写字母可以避免命名冲突
#     变量名中不允许有空格和句点，不能以数字开头
#     在多个单词组成的变量名中，可以从第二个单词开始将单词首字母大写以显示分界，这种做法称
#         为驼峰命名法
#     Python的保留字，如if、for、print等，禁止用于变量命名

# 1.4.4 更多的函数相关信息
# 定义函数参数列表的规则：
#     函数的参数可以只有一个，也可以为以逗号分隔的多个参数，还可以没有参数
#     有些函数允许的参数数量可变，并且提供不同的参数可以实现不同的功能
#     函数严格来说只能返回一个实例，但可以将多个用逗号分隔的变量视为一个由这些元素组成的元
#         组，从而实现返回多个值的功能
#     函数除了可以有返回值外，还可以通过其他途径产生影响，如生成文件、在终端打印字符串等

# Python函数的参数匹配方法：
#     位置实参：实参与形参在参数列表的位置相同的匹配
#     关键字实参：形参名=实参，实参与被赋值的形参匹配


def f(x, y):
    return x * np.exp(-1 * y)


print(f(2, 6))
print(f(y=6, x=2))
